#include <bits/stdc++.h>

using namespace std;
const int N=1e5+5;

int n,m,k,r;
int po[N];
bool vis[N];
int d[1005][1005],A[N],x[N],a[N];

void init(int n){
    po[0]=1;
    for(int i=1;i<=n;i++)po[i]=po[i-1]*2;
}

int dfs(int x,vector<int> vec){
    if(vec.size()==2)
        vis[vec[1]]=1;
    vector<int> rest;
    rest.push_back(0);
    for(int i=1;i<vec.size();i+=2){
        if(d[x][i/2+1]){
            if(vec[i]>=r)
                rest.push_back(vec[i]);
            else rest.push_back(vec[i+1]);
        }
        else{
            if(A[i+1]>=r)
                rest.push_back(vec[i]);
            else rest.push_back(vec[i+1]);
        }
    }
    bool f=0;
    if(vec.size()%2==1){
        if(!d[x][vec.size()/2+1]&&vec[vec.size()]){
                rest.push_back(vec[vec.size()]);
                f=1;
        }
        dfs(x+1,rest);
        if(d[x][vec.size()]&&!f)
            rest.push_back(vec[vec.size()]);
        dfs(x+1,rest);
    }
}

void solve(){
    memset(vis,0,sizeof(vis));
    for(int i=0;i<5;i++)cin>>x[i];
    for(int i=1;i<=n;i++)
        A[i]=a[i]^x[i%4];
    for(int i=1;i<=n;i++){
        vector<int> vec;
        if(int j=1;j<=i;j++)
            vec.push_back(A[j]);
        int res=0;
        dfs(1,vec);
        for(int i=1;i<=po[k];i++)if(vis[i])res++;
        cout<<res<<'\n';
    }
}

signed main(){
//    freopen(".in","r",stdin);
//    freopen(".out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=m;i++)cin>>c[i];
    init(n);
    while(po[k]<n)k++;
    r=po[k]-n;
    for(int i=1;i<=po[k];i++)
        for(int j=1;j<=po[k]-n)
            cin>>d[i][j];
    int _;
    cin>>_;
    while(_--)
        solve();
    return 0;
}
